#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    
    // int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};/*二维数组,第一个[3]表示存了三组元素中每组第一个元素的
    // 地址,第二个[4]表示每组有四个int型元素,而名字a,则储存着三个首地址的第一个地址,即总体元素中的第一个元素
    // 的地址的地址*/
    // for (int i = 0; i < 3; i++)//打印每组元素中的第一个元素
    // {
    //     printf("%d  ",*a[i]);
    // }
    // printf("\n");

    // int (*p)[4] ;/*指针数组,代表p这个指针可以指向一个一维数组,[4]表示了这个被指向的一维数组的长度为四个
    // 整形,也表示了p的步长,即p+1时,可以往后跳四个字节*/
    // p = a;/*将p指向上面的二维数组a,因为二维数组可以算是多个一维数组,所以这里就是p指向了a的一部分元素*/
    // printf("%d\n",*(*(p+1)+2));/*当指针数组与二维数组的分组同等长度时,可以做同等的取值(应该吧)*/

    // int *b[3];/*数组指针,即存放指针的数组*/
    // for (int i = 0; i < 3; i++)/*这里想要将前面二维数组每组的首地址存入这个指针数组,用到了for循环*/
    // {
    //     b[i]=a[i];
    //     printf("%d  ",*b[i]);
    // }
    // printf("\n");

    /*int c = 10;//整形类型的变量c,储存一个值为10
    int *d = &c;//指针类型的变量d,储存的是变量c的地址
    int **e = &d;//指针的指针类型的变量e,储存的是变量d的地址
    int ***f = &e;//指针的指针的指针类型的变量f,储存的是变量e的地址
    printf("c的值为%d\n",c);
    printf("c的地址为%p\n",&c);
    printf("d指向的地址为%p\n",d);
    printf("d的地址为%p\n",&d);
    printf("e指向的地址为%p\n",e);
    printf("e的地址为%p\n",&e);
    printf("f指向的地址为%p\n",f);*/

    



    return 0;
}
